import java.awt.event.MouseEvent;
import java.util.HashMap;

public class OperadorLigacaoStexto extends Operador {

	private LigacaoIdentificadorPonto ligacaoPonto;
	private HashMap<OpcaoOperadorLigacao, EstadoOperadorLigacaoStexto> estadosOperador;
	private EstadoOperadorLigacaoStexto estadoOperadorAtual;

	/**
		 */
	public OperadorLigacaoStexto(PainelDesenho painelDesenho) {
		super(painelDesenho);
		this.ligacaoPonto = null;
		criarEstados();
	}

	private void criarEstados() {
		// TODO Auto-generated method stub
		estadosOperador = new HashMap<OpcaoOperadorLigacao, EstadoOperadorLigacaoStexto>();
		estadosOperador.put(OpcaoOperadorLigacao.PESQUISA_IDENTIFICADOR,
				new EstadoPesquisaIdentificadorOperadorLigacaoStexto(this));
		estadosOperador.put(OpcaoOperadorLigacao.SELECAO_IDENTIFICADOR,
				new EstadoSelecaoIdentificadorOperadorLigacaoStexto(this));
		estadosOperador.put(OpcaoOperadorLigacao.PESQUISA_IDENTIFICADOR_VALIDO,
				new EstadoPesquisaIdentificadorValidaOperadorLigarStexto(this));
		estadosOperador.put(OpcaoOperadorLigacao.LIGACAO_IDENTIFICADOR_VALIDO,
				new EstadoLigacaoStextoIdentificadorValidaOperadorLigar(this));
		iniciar();
	}

	@Override
	public void mouseMoved(MouseEvent mouseEvent) {
		// TODO Auto-generated method stub
		super.mouseMoved(mouseEvent);
		// painelDesenho.setCursor(identificador == null ? painelDesenho
		// .getCursorLigacaoCtexto() : Cursor.getDefaultCursor());
		estadoOperadorAtual.mouseMoved(mouseEvent);
	}

	@Override
	public void mousePressed(MouseEvent mouseEvent) {
		// TODO Auto-generated method stub
		super.mousePressed(mouseEvent);
		estadoOperadorAtual.mousePressed(mouseEvent);
	}

	@Override
	public void mouseDragged(MouseEvent mouseEvent) {
		// TODO Auto-generated method stub
		super.mouseDragged(mouseEvent);
		estadoOperadorAtual.mouseDragged(mouseEvent);
	}

	@Override
	public void mouseReleased(MouseEvent mouseEvent) {
		estadoOperadorAtual.mouseReleased(mouseEvent);
		super.mouseReleased(mouseEvent);
	}

	@Override
	protected void iniciar() {
		// TODO Auto-generated method stub
		painelDesenho.setCursor(painelDesenho.getCursorLigacaoStexto());
		selecionarEstado(OpcaoOperadorLigacao.PESQUISA_IDENTIFICADOR);
	}
	
	public void selecionarEstado(OpcaoOperadorLigacao opcaoOperadorLigacao) { 
		estadoOperadorAtual = estadosOperador.get(opcaoOperadorLigacao);
	}

	public LigacaoIdentificadorPonto getLigacaoPonto() {
		return ligacaoPonto;
	}

	public void setLigacaoPonto(LigacaoIdentificadorPonto ligacaoPonto) {
		this.ligacaoPonto = ligacaoPonto;
	}
	
	public Coordenada getPosicaoCursor() {
		// TODO Auto-generated method stub
		return posicaoCursor;
	}	
	
	
	
}
